Android开发:“线程退出未捕获的异常”

时间:2015-12-07 11:07:43

标签: java android xml

我正在尝试使用php创建我的第一个Android应用,但我在开始时遇到了一些困难。

当我运行我的代码时,我收到此错误日志:

12-07 19:34:22.095: D/AndroidRuntime(13777): Shutting down VM
12-07 19:34:22.095: W/dalvikvm(13777): threadid=1: thread exiting with uncaught exception (group=0x42300c08)
12-07 19:34:22.095: E/AndroidRuntime(13777): FATAL EXCEPTION: main
12-07 19:34:22.095: E/AndroidRuntime(13777): Process: com.example.parents_gps, PID: 13777
12-07 19:34:22.095: E/AndroidRuntime(13777): java.lang.NullPointerException
12-07 19:34:22.095: E/AndroidRuntime(13777):    at com.example.parents_gps.MainActivity$1.onClick(MainActivity.java:42)
12-07 19:34:22.095: E/AndroidRuntime(13777):    at android.view.View.performClick(View.java:4633)
12-07 19:34:22.095: E/AndroidRuntime(13777):    at android.view.View$PerformClick.run(View.java:19270)
12-07 19:34:22.095: E/AndroidRuntime(13777):    at android.os.Handler.handleCallback(Handler.java:733)
12-07 19:34:22.095: E/AndroidRuntime(13777):    at android.os.Handler.dispatchMessage(Handler.java:95)
12-07 19:34:22.095: E/AndroidRuntime(13777):    at android.os.Looper.loop(Looper.java:146)
12-07 19:34:22.095: E/AndroidRuntime(13777):    at android.app.ActivityThread.main(ActivityThread.java:5602)
12-07 19:34:22.095: E/AndroidRuntime(13777):    at java.lang.reflect.Method.invokeNative(Native Method)
12-07 19:34:22.095: E/AndroidRuntime(13777):    at java.lang.reflect.Method.invoke(Method.java:515)
12-07 19:34:22.095: E/AndroidRuntime(13777):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
12-07 19:34:22.095: E/AndroidRuntime(13777):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
12-07 19:34:22.095: E/AndroidRuntime(13777):    at dalvik.system.NativeStart.main(Native Method)

我认为问题是这个"线程退出未捕获的异常"部分,我不知道异常是什么或导致它的原因。

这是我的代码:

MainActivity.java: package com.example.parents_gps;

package com.example.parents_gps;

import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
private final String SERVER_ADDRESS = "http://210.119.84.108/Gps";
AsyncTask<Void, Integer, Void> myTask;
ArrayList<String> identity, password;
int dataSize = 0;

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

    Button loginBtn, registerBtn;
    final EditText id, pw;
    loginBtn = (Button) findViewById(R.id.loginBtn);
    registerBtn = (Button) findViewById(R.id.registerBtn);
    id = (EditText) findViewById(R.id.id);
    pw = (EditText) findViewById(R.id.pw);

    loginBtn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (String.valueOf(id.getText()) == String.valueOf(identity.get(0))
                    && String.valueOf(pw.getText()) == String.valueOf(password.get(0))) {
                Toast.makeText(MainActivity.this, "로그인 완료", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(MainActivity.this, LoginSuccess.class);
                startActivity(intent);
            } else
                Toast.makeText(MainActivity.this, "ID 혹은 P/W가 올바르지 않습니다.", Toast.LENGTH_SHORT).show();
            myTask = new AsyncTask<Void, Integer, Void>() {
                @Override
                protected Void doInBackground(Void... params) {
                    try {
                        URL url = new URL(SERVER_ADDRESS + "/search_regpar.php");
                        url.openStream();
                        identity = getXmlDataList("searchresult_p.xml", "identity");
                        password = getXmlDataList("searchresult_p.xml", "password");
                        dataSize = identity.size();
                        Log.i("Test", String.valueOf(identity.get(0)));
                        Log.i("Test2", String.valueOf(id.getText()));
                        for (int i = 0; i < dataSize; i++)
                            Log.d("size", String.valueOf(identity.get(i)));
                    } catch (Exception e) {
                        Log.e("Error", e.getMessage());
                    }
                    return null;
                }

                private ArrayList<String> getXmlDataList(String filename, String str) {
                    String rss = SERVER_ADDRESS + "/";
                    ArrayList<String> ret = new ArrayList<String>();

                    try {
                        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                        factory.setNamespaceAware(true);
                        XmlPullParser xpp = factory.newPullParser();
                        URL server = new URL(rss + filename);
                        InputStream is = server.openStream();
                        xpp.setInput(is, "UTF-8");

                        int eventType = xpp.getEventType();

                        while (eventType != XmlPullParser.END_DOCUMENT) {
                            if (eventType == XmlPullParser.START_TAG) {
                                if (xpp.getName().equals(str)) {
                                    ret.add(xpp.nextText());
                                }
                            }
                            eventType = xpp.next();
                        }
                    } catch (Exception e) {
                        Log.e("Error", e.getMessage());
                    }

                    return ret;
                }
            };
            myTask.execute();
        }
    });

    registerBtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
            startActivity(intent);
        }
    });
    }
}

这是我的activity_main.xmlAndroidManifest.xml

activity_main.xml中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context="com.example.parents_gps.MainActivity" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="어서오세요"
    android:textSize="20sp" />

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="ID"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:hint="xxx@mail.com"
        android:textSize="20sp" />
</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="P/W"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/pw"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:hint="Password를 입력하세요"
        android:textSize="20sp" />
</LinearLayout>

<Button
    android:id="@+id/loginBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="로그인"
    android:textSize="20sp" />

<Button
    android:id="@+id/registerBtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="회원가입"
    android:textSize="20sp" />

</LinearLayout>

的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.parents_gps"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="21" />

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".InfoTraced"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name=".InfoParents"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name=".InfoEdit"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name=".RegisterTraced"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name=".RegisterParents"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name=".LoginSuccess"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name=".MapView"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name=".RegisterActivity"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
     <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AIzaSyBJe2YzPGrINQM88R8yXpVisnC1sl1TpT8" />
</application>

</manifest>

1 个答案:

答案 0 :(得分:0)

看起来你没有把你的'身份'和'密码'数组列表初始化。当你在这里比较它们时它们是空的:

if (String.valueOf(id.getText()) == String.valueOf(identity.get(0))
                && String.valueOf(pw.getText()) == String.valueOf(password.get(0))) {