“打开”新活动后出现黑屏

时间:2018-06-29 18:09:33

标签: android

首先,我必须说,我在开发方面是个新手,所以请原谅我的愚蠢问题。 我有两个活动。在MainActivity中,我有一个可以带我前往SecondActivity的按钮。触摸此按钮后,手机上出现黑屏。哪里有问题?如果您想告诉我一个问题,我将不胜感激。对不起我的英语不好。 这是代码:

清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ca_ltd.intenty">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".SecondActivity"></activity>
</application>

</manifest>

MainAcitivy:

public class MainActivity extends AppCompatActivity {

Button buttonNext; // to do intentu
Button buttonGo;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    createCustomDialog();

    buttonNext = (Button) findViewById(R.id.buttonNext); 
    buttonNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, 
 SecondActivity.class);
            startActivity(intent); 

        }
    });
 }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
 }

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

public void createCustomDialog(){ 

    final Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.powitanie_test);
    dialog.setTitle("Tets");

    Button dalej = (Button) dialog.findViewById(R.id.buttonGo);
    dalej.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dialog.dismiss();             }
    });
}
}

content_main:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.ca_ltd.intenty.MainActivity"
tools:showIn="@layout/activity_main">

<Button
    android:id="@+id/buttonNext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Przejdź do następnego"
    app:layout_constraintTop_toTopOf="parent"
    android:layout_marginTop="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    android:layout_marginBottom="8dp"
    android:layout_marginRight="8dp"
    app:layout_constraintRight_toRightOf="parent"
    android:layout_marginLeft="8dp"
    app:layout_constraintLeft_toLeftOf="parent" />
</android.support.constraint.ConstraintLayout>

SecondActivity:

public class SecondActivity extends Activity {

ListView lv;
ArrayAdapter<String> adapter;
String address="http://10.0.0.2/soccer.php";
InputStream is=null;
String line=null;
String result=null;
String[] data;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    lv=(ListView) findViewById(R.id.listView1);

    StrictMode.setThreadPolicy((new StrictMode.ThreadPolicy.Builder().permitNetwork().build()));
    getData();
    adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
    lv.setAdapter(adapter);

}

private void getData()           
{
    try {
        URL url = new URL(address);
        HttpURLConnection con=(HttpURLConnection) url.openConnection();

        con.setRequestMethod("GET");

        is=new BufferedInputStream(con.getInputStream());

    }catch (Exception e)
    {
        e.printStackTrace();
    }

    try
    {
        BufferedReader br=new BufferedReader(new InputStreamReader(is));
        StringBuilder sb=new StringBuilder();

        while((line=br.readLine()) != null);
        {
            sb.append(line+"\n");
        }
        is.close();
        result=sb.toString();

    }catch (Exception e)
    {
        e.printStackTrace();
    }

    try
    {
        JSONArray ja=new JSONArray(result);
        JSONObject jo=null;

        data=new String[ja.length()];

        int i;
        for (i = 0; i<ja.length();i++)
        {
            jo=ja.getJSONObject(i);
            data[i]=jo.getString("Name");
        }
    }catch (Exception e)
    {
        e.printStackTrace();
    }
}
}

activity_second:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/listView1"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    ></ListView>
</LinearLayout>

Logcat:

  --------- beginning of crash
    06-29 19:13:53.721 2831-2831/com.example.ca_ltd.intenty E/AndroidRuntime: 
    FATAL EXCEPTION: main

    Process: com.example.ca_ltd.intenty, PID: 2831

    java.lang.RuntimeException: Unable to start activity 

 ComponentInfo{com.example.ca_ltd.intenty/com.example.ca_ltd.intenty.SecondActivity}: java.lang.NullPointerException
                                                                              at 
    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
                                                                              at 
    android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
                                                                              at 
    android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                                              at 
    android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
                                                                              at 
    android.os.Handler.dispatchMessage(Handler.java:105)
                                                                              at 
    android.os.Looper.loop(Looper.java:164)
                                                                              at 
    android.app.ActivityThread.main(ActivityThread.java:6541)
                                                                              at 
    java.lang.reflect.Method.invoke(Native Method)
                                                                              at 
    com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                              at 
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

    Caused by: java.lang.NullPointerException
                                                                              at 
    java.util.Objects.requireNonNull(Objects.java:203)
                                                                              at 
    java.util.Arrays$ArrayList.<init>(Arrays.java:3741)
                                                                              at 
    java.util.Arrays.asList(Arrays.java:3728)
                                                                              at 
    android.widget.ArrayAdapter.<init>(ArrayAdapter.java:163)
                                                                              at 
    com.example.ca_ltd.intenty.SecondActivity.onCreate(SecondActivity.java:44)
                                                                              at 
    android.app.Activity.performCreate(Activity.java:6975)
                                                                              at 
    android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
                                                                              at 
    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
                                                                              at 
    android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
                                                                              at 
    android.app.ActivityThread.-wrap11(Unknown Source:0) 
                                                                              at 
    android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
                                                                              at 
    android.os.Handler.dispatchMessage(Handler.java:105) 
                                                                              at 
    android.os.Looper.loop(Looper.java:164) 
                                                                              at 
    android.app.ActivityThread.main(ActivityThread.java:6541) 
                                                                              at 
    java.lang.reflect.Method.invoke(Native Method) 
                                                                              at 
    com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                                                                              at 
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

2 个答案:

答案 0 :(得分:0)

为什么要在主线程上进行网络调用。您的getData()方法应在后台线程中执行,请使用asynctask或普通线程。此网络任务会消耗您的UI线程,这就是黑屏的原因,如果耗时超过5-6秒,则会导致ANR

以下是使用截击进行请求的示例

// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";

// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        // Parse your response here
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        // Error has occurred
    }
});

// Add the request to the RequestQueue.
queue.add(stringRequest);

有关排球的更多信息,请访问此页面https://exceljet.net/formula/create-array-of-numbers

答案 1 :(得分:0)

您的应用程序崩溃是因为初始化适配器时,您的数据为空。解决此问题的第一步,您可以在获得api的结果并初始化data变量后创建适配器。