Android从其他Web服务获取数据

时间:2016-01-21 23:21:14

标签: android rest android-asynctask

我希望Main Activity从一个其他Web服务获取一些数据。对于这项工作,我使用AsyncTask来连接Web服务。当在onCreate方法中显示XML布局文件时,将显示来自Web服务的数据,该应用程序可以正常工作。但是,当onCreate方法显示不同的XML Layout文件时,从将显示来自Web服务的数据的Layout文件中,应用程序不起作用,并且logcats在从Web服务获取的数据中显示NullPointerException。

public class MainActivity extends Activity  
{       
    @Override
    public void onCreate( Bundle savedInstanceState ) 
    { 
        super.onCreate( savedInstanceState );
        setContentView( R.layout.splash_screen );     
        new DownloadSights().execute();
    }

    class DownloadSights extends AsyncTask< Void, Void, Places > 
    {
        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
        }

        @Override
        protected ListKozanisPlaces doInBackground( Void... params )
        {
            try 
            {
                final String url = "http://192.168.1.3:8080/.../getSights";
                InputStreamReader reader = new InputStreamReader( new URL( url ).openStream() );
                Places sightsList = new Gson().fromJson( reader, Places.class );
                return sightsList;
            } 
            catch ( Exception e )
            {
                Log.e( "CityCuide", e.getMessage() );
            }
            return null;
        }


        @Override 
        protected void onPostExecute( Places sightsList )
        {
            TextView testTextView = (TextView) findViewById(R.id.testTextView);
            testTextView.setText( sightsList.getList().get( 1 ).toString() );
        }
    }
}

位于行中的错误:

  

testTextView.setText(sightsList.getList()。get(1).toString());

Logcat显示:

01-22 01:31:12.211: E/AndroidRuntime(5455): FATAL EXCEPTION: main
01-22 01:31:12.211: E/AndroidRuntime(5455): java.lang.NullPointerException
01-22 01:31:12.211: E/AndroidRuntime(5455):     at com.example.androidkozaniwebserviceclient.SplashScreenActivity$DownloadSights.onPostExecute(SplashScreenActivity.java:66)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at com.example.androidkozaniwebserviceclient.SplashScreenActivity$DownloadSights.onPostExecute(SplashScreenActivity.java:1)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at android.os.AsyncTask.finish(AsyncTask.java:602)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at android.os.AsyncTask.access$600(AsyncTask.java:156)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at android.os.Looper.loop(Looper.java:137)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at android.app.ActivityThread.main(ActivityThread.java:4424)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at java.lang.reflect.Method.invokeNative(Native Method)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at java.lang.reflect.Method.invoke(Method.java:511)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-22 01:31:12.211: E/AndroidRuntime(5455):     at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:1)

如果您加载不同的xml布局,它将不会有一个名为testTextView的textview。这将使findViewById返回null。当你尝试在它上面调用setText时,这会在onPostExecute中导致NullPointerException。

这个问题有点微不足道,但是将来请附上堆栈跟踪以及任何崩溃的错误。

答案 1 :(得分:0)

如果您确定Gabe的答案,请确保sightsList不为空。 我建议你将testTextView.setText( sightsList.getList().get( 1 ).toString() );分成几部分,以便轻松找出那里发生的事情。

List targetList = sightsList.getList();
String data = targetList.get(1).toString(); // this index 1 might return null also
textTextView.setText(data);
相关问题