gpt4 book ai didi

android-asynctask - 不幸的是,使用AsyncTask时应用已停止

转载 作者:行者123 更新时间:2023-12-03 12:36:26 25 4
gpt4 key购买 nike

我一直在为同事开发销售应用程序。我一直在做一个步骤,制作了一个服务器应用程序,该程序读取我计算机上的txt文件,然后将其发送到android手机上的应用程序,以显示结果。问题在于,一旦asyncTask完成并且服务器和电话应用都终止,电话上的应用就会崩溃。我查看了logcat,它似乎是nullpointer异常。我发现这很奇怪,因为代码中的while循环只允许非空数据通过。
这是我的代码:

package com.AWSbeacon;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.AWSbeacon.*;

public class MainActivity extends Activity{

String[] Names = null;
ArrayList<String> names = new ArrayList<String>();


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

Button starter = (Button) this.findViewById(R.id.button1);
starter.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
new GetNames().execute();
Names = names.toArray(Names); //the error pops up here
for(int i=0; i<Names.length; i++){
TextView txtView1 = (TextView)findViewById((int) R.id.text1);
txtView1.setText((CharSequence)txtView1 + Names[i]);
}
}
});
}

class GetNames extends AsyncTask<Void,Void,Void>{


ArrayList<String> names = new ArrayList<String>();
String[] Names = null;
DataOutputStream out = null;
DataInputStream in = null;
Socket sock = null;
String T = null;

@Override
protected Void doInBackground(Void... params) {

try {
sock = new Socket("elvishknight1.noip.me", 8000);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
in = new DataInputStream(sock.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
out = new DataOutputStream(sock.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
while(true){
out.writeUTF("ok");
T = in.readUTF();
if(in!=null && !in.readUTF().contains("end")){
names.add(T);
}
else if(in.readUTF().contains("end")){
break;
}
}

out.flush();
out.close();
in.close();
sock.close();


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;

}
}

我的服务器代码(以防万一):
package beaconserver;

import java.io.*;


import java.net.*;
import java.util.*;

public class Bserver {

static BufferedReader text = null;
static ServerSocket Sock = null;
static Socket server = null;

public static void main(String[] args) {

ArrayList<String> Names = new ArrayList<String>();

try {
text = new BufferedReader(new FileReader("/home/kyle/Documents/names.txt"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {

String names = text.readLine();
while((names=text.readLine())!=null){
Names.add(names);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String[] Text = new String[Names.size()];
Text = Names.toArray(Text);
SendMessage(Text);
}

public static void SendMessage(String[] lines){
DataInputStream in = null;
DataOutputStream out = null;
String ok = null;
try {
Sock = new ServerSocket(8000);
} catch (IOException e) {
e.printStackTrace();
}
try{
server = Sock.accept();
in = new DataInputStream(server.getInputStream());
out = new DataOutputStream(server.getOutputStream());

for(int i=0; i<lines.length; i++){
while(ok==null){
ok = in.readUTF();
if(ok!=null){
break;
}
}
out.writeUTF(lines[i]);
}
out.writeUTF("end");
in.close();
out.flush();
out.close();
server.close();
Sock.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

以及logcat:
05-25 09:23:37.218: E/AndroidRuntime(9722): FATAL EXCEPTION: main
05-25 09:23:37.218: E/AndroidRuntime(9722): java.lang.NullPointerException
05-25 09:23:37.218: E/AndroidRuntime(9722): at java.util.ArrayList.toArray(ArrayList.java:514)
05-25 09:23:37.218: E/AndroidRuntime(9722): at com.AWSbeacon.MainActivity$1.onClick(MainActivity.java:37)
05-25 09:23:37.218: E/AndroidRuntime(9722): at android.view.View.performClick(View.java:4202)
05-25 09:23:37.218: E/AndroidRuntime(9722): at android.view.View$PerformClick.run(View.java:17340)
05-25 09:23:37.218: E/AndroidRuntime(9722): at android.os.Handler.handleCallback(Handler.java:725)
05-25 09:23:37.218: E/AndroidRuntime(9722): at android.os.Handler.dispatchMessage(Handler.java:92)
05-25 09:23:37.218: E/AndroidRuntime(9722): at android.os.Looper.loop(Looper.java:137)
05-25 09:23:37.218: E/AndroidRuntime(9722): at android.app.ActivityThread.main(ActivityThread.java:5039)
05-25 09:23:37.218: E/AndroidRuntime(9722): at java.lang.reflect.Method.invokeNative(Native Method)
05-25 09:23:37.218: E/AndroidRuntime(9722): at java.lang.reflect.Method.invoke(Method.java:511)
05-25 09:23:37.218: E/AndroidRuntime(9722): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-25 09:23:37.218: E/AndroidRuntime(9722): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-25 09:23:37.218: E/AndroidRuntime(9722): at dalvik.system.NativeStart.main(Native Method)

在此先感谢您的帮助

最佳答案

您在游览onClickListener中使用了错误的名称变量。
也许您应该考虑重命名某些变量,例如使用nameArray

关于android-asynctask - 不幸的是,使用AsyncTask时应用已停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23856168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com