我是android编程新手,我试图通过Android上的TCP客户端接收数据包数据。
我从raspberry pi获取流数据包后,数据包将被解析为变量,在我的Masukan()函数中返回字符串值 filter 。
我可以在Adhrs Activity上获得Masukan()的返回值,但是我无法从另一个活动中获取Masukan()的返回值。
错误说Nullpointerexception,我将不胜感激任何帮助。 这是我的代码:
package com.uavgama;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
public class Adhrsparse extends Activity {
String[] parsing = null;
private final String server = "192.168.43.20";
Handler handler = new Handler();
Runnable runnable = new Runnable() {
public void run() {
Keluar();
}
};
//declaration of textview etc
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.adahrs);
status = (TextView) findViewById(R.id.textView16);
paketdata = (TextView) findViewById(R.id.textView17);
tvalt = (TextView) findViewById(R.id.textView18);
tvasp = (TextView) findViewById(R.id.textView19);
tvlat = (TextView) findViewById(R.id.textView20);
tvlon = (TextView) findViewById(R.id.textView21);
tvptc = (TextView) findViewById(R.id.textView22);
tvrol = (TextView) findViewById(R.id.textView23);
tvyaw = (TextView) findViewById(R.id.textView24);
Keluar();
}
public String Keluar(){
String masuk = new String();
try {
masuk = Masukan();
status.setText(masuk);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
// Intent intentcam = new Intent(this,CameraView.class);
// intentcam.putExtra("filter", filter);
// startActivity(intentcam);
e.printStackTrace();
}
handler.postDelayed(runnable, 100);
return masuk;
}
public String Masukan() throws UnknownHostException, IOException{
Socket s = new Socket(server,12345);
//BufferedReader inp = null;
BufferedReader inp = new BufferedReader(new InputStreamReader(s.getInputStream()));
//String serverMsg = null;
String serverMsg = inp.readLine();
//filter keutuhan data kemudian diprint di var paketdata
if ( serverMsg.endsWith("#")) {
filter = serverMsg;
}
paketdata.setText(filter);
parsing = filter.split("\\|");
parsing[0] = parsing[0].replace("$", "");
tvalt.setText(parsing[0]);
tvasp.setText(parsing[1]);
tvlat.setText(parsing[2]);
tvlon.setText(parsing[3]);
tvptc.setText(parsing[4]);
tvrol.setText(parsing[5]);
parsing[6] = parsing[6].replace("#", "");
tvyaw.setText(parsing[6]);
s.close();
return filter;
};
}
和我的另一项活动
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import com.uavgama.Adhrsparse;
public class CameraView extends Activity{
String[] parsingcam = null;
private final String server = "192.168.43.20";
InetAddress
/** Called when the activity is first created. */
Scanner scanner = new Scanner(System.in);
Handler handler = new Handler();
Runnable runnable = new Runnable()
{
public void run() {
adhrspars();
}
};
TextView statuse;
TextView paketdata;
TextView data;
String latlon;
String filter;
String parse;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camera);
runnable.run();
Intent fltr = getIntent();
latlon = fltr.getStringExtra("filter");
data.setText(latlon);
adhrspars();
adhrs();
}
public void adhrspars(){
adhrs();
}
public void adhrs() {
String parsed = new String();
Adhrsparse adhrs = new Adhrsparse();
try {
parsed = adhrs.Masukan() ;
data.setText(parsed);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.postDelayed(runnable, 100);
};
这是我的logcat:
07-23 20:00:14.708: E/AndroidRuntime(24895): FATAL EXCEPTION: main
07-23 20:00:14.708: E/AndroidRuntime(24895): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.uavgama/com.uavgama.CameraView}: java.lang.NullPointerException
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2063)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.app.ActivityThread.startActivityNow(ActivityThread.java:1904)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:753)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.widget.TabHost.setCurrentTab(TabHost.java:417)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:158)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:546)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.view.View.performClick(View.java:4103)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.view.View$PerformClick.run(View.java:17117)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.os.Handler.handleCallback(Handler.java:615)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.os.Handler.dispatchMessage(Handler.java:92)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.os.Looper.loop(Looper.java:137)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.app.ActivityThread.main(ActivityThread.java:4744)
07-23 20:00:14.708: E/AndroidRuntime(24895): at java.lang.reflect.Method.invokeNative(Native Method)
07-23 20:00:14.708: E/AndroidRuntime(24895): at java.lang.reflect.Method.invoke(Method.java:511)
07-23 20:00:14.708: E/AndroidRuntime(24895): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-23 20:00:14.708: E/AndroidRuntime(24895): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-23 20:00:14.708: E/AndroidRuntime(24895): at dalvik.system.NativeStart.main(Native Method)
07-23 20:00:14.708: E/AndroidRuntime(24895): Caused by: java.lang.NullPointerException
07-23 20:00:14.708: E/AndroidRuntime(24895): at com.uavgama.CameraView.onCreate(CameraView.java:48)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.app.Activity.performCreate(Activity.java:5008)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
07-23 20:00:14.708: E/AndroidRuntime(24895): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2027)
07-23 20:00:14.708: E/AndroidRuntime(24895): ... 18 more
感谢您的帮助
答案 0 :(得分:0)
我看到了几个问题。首先,如果您没有通过Intent
发送数据
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("key", value); // this line here adds the extra data
然后latlon
将是null
,但不一定会抛出NPE
。
其次,我相信这是您获取NPE
的地方,您从未初始化TextView data
,因此当您尝试拨打NPE
时,您会收到setText()
它。将您的onCreate()
更改为
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camera);
runnable.run();
Intent fltr = getIntent();
latlon = fltr.getStringExtra("filter");
data = (TextView) findViewById(R.id.idOfTextView); // YOU NEED TO INITAILIZE IT LIKE THIS
data.setText(latlon);
由于您的Masukan()
方法在多个地方使用,您可能需要取出获取数据的部分并将它们放在单独的Java类中的static
方法中,然后在需要时String
只需运行
String variableName = SomeClassName.Masukan();
来自哪里