当我尝试使按钮不可见时,java.lang.NullPointerException

托奎克斯·威斯卡斯

此方法工作正常。

public void onClick(View view) { 
btn = (Button) findViewById(R.id.trytogetin);
progr = (ProgressBar) findViewById(R.id.progressBar);
btn.setVisibility(View.INVISIBLE);
progr.setVisibility(View.VISIBLE);
EditText login = (EditText) findViewById(R.id.loginfld);
EditText passw = (EditText) findViewById(R.id.passfld);
String logincmd = "CheckLogin*" + login.getText() + "*" + passw.getText() + "*";
ss.senddata(logincmd, 1);
}

在此方法中,java.lang.NullPointerException出现(在btn.setVisibility(View.VISIBLE)上;

    public void geturdata(String answer) {
    if (answer != null)
    {
        System.out.println("true");
         btn.setVisibility(View.VISIBLE);
    }
    else
    {
        System.out.println("false");
    }
}

请告诉我如何使用此方法调用按钮?我也不能在这种方法中使用StartActivity(intent)。(相同的错误)。两个方法都放在一个活动中。

这是完整的代码,这是活动

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.content.Intent;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;


public class Login extends Activity {

SocketServer ss = new SocketServer();
Button btn;
ProgressBar progr;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    btn = (Button) findViewById(R.id.trytogetin);
    progr = (ProgressBar) findViewById(R.id.progressBar);
    try {
        ss.setserver();
    } catch (Exception ex) {
        System.out.println("------- " + ex);
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    menu.add("menu1");
    getMenuInflater().inflate(R.menu.login, 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();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
 }

 public void onClick(View view) {

    btn.setVisibility(View.INVISIBLE);
    progr.setVisibility(View.VISIBLE);
    EditText login = (EditText) findViewById(R.id.loginfld);
    EditText passw = (EditText) findViewById(R.id.passfld);
    String logincmd = "CheckLogin*" + login.getText() + "*" + passw.getText() + "*";
    ss.senddata(logincmd, 1);
 }

    public void geturdata(String answer) {
    if (answer != null)
    {
        System.out.println("true");
        btn.setVisibility(View.VISIBLE);
    }
    else
    {
        System.out.println("false");
    }
}
}

这是调用> geturdata的类

import android.os.Looper;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketServer {

private Socket socket;
private static final int SERVERPORT = 11000;
private static String SERVER_IP = "192.168.2.222";
String answer;
private static String cmdtext;
private static int caller;

class ClientThread implements Runnable
{
   public void run() {
       if (cmdtext.equals("setserver"))
       {
           try
           {
               InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
               socket = new Socket(serverAddr, SERVERPORT);
           }
           catch (Exception ex)
           {System.out.println(ex);}
       }

       else {
           try {
               String str = cmdtext;
               PrintWriter out = new PrintWriter(new BufferedWriter(new       OutputStreamWriter(socket.getOutputStream())), true);
               out.println(str);
               out.flush();
               byte[] data = new byte[256];  
               InputStream inp = socket.getInputStream();
               inp.read(data);
               answer = new String(data, "UTF-8");
                                  Looper.prepare();
               handledata(answer);
               Looper.loop();
           } catch (UnknownHostException e) {
               e.printStackTrace();
           } catch (IOException e) {
               e.printStackTrace();
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
    }
}
////////////////////////////////////////
public void setserver ()
{
   new Thread(new ClientThread()).start();
   cmdtext = "setserver";
}

private void handledata(String answer)  
{
    switch (caller) {
        case 1:
        {
            Login lgn = new Login();
            lgn.geturdata(answer);
        }
    }

}

public void senddata(String cmd, int callerid) 
{
this.cmdtext = cmd;
this.caller = callerid;
new Thread(new ClientThread()).start();
}
}
潜行

btnnull当你打电话的时候geturdata()你应该叫btn = (Button) findViewById(R.id.trytogetin);后直接setContentView(R.layout.activity_main);public void onCreate(Bundle b)

private Button btn;  

public void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.activity_main);
    btn = (Button)findViewById(R.id.trytogetin);
    ...
}

编辑:

但是,现在看您的代码,这不是问题。这里有两个问题

        Login lgn = new Login();
        lgn.geturdata(answer);

您尝试实例化一个Activity您应该通过意图开始活动,以便在正常的活动生命周期中通过实例化它们onCreate

但是还有更多:您尝试Button从另一个(而Thread不是创建Button(UI线程)的)设置。

您可以尝试从线程的上下文中获取一个句柄,然后调用context.runOnUiThread(Runnable)这样,您可以从其他线程更新UI。

因此,这NPE是由于您实例化Login(必须通过完成Android)并调用方法而导致的,但并没有夸大ContentView,因此无论如何都找不到Button,findViewById返回null

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

java.lang.NullPointerException?

当我尝试将值添加到Array时java.lang.NullPointerException

给java.lang.NullPointerException:当我单击当前位置按钮时

我在尝试检查internetConnection时得到java.lang.NullPointerException?

当我尝试在Vaadin View中初始化方法时,我得到java.lang.NullPointerException:null

JDBC:java.lang.NullPointerException

java.lang.NullPointerException :(片段)

java.lang.nullpointerexception错误

遇到java.lang.NullPointerException

getResourceAsStream 的 java.lang.NullPointerException

java.lang.NullPointerException错误?

java.lang.NullPointerException: uriString

Jmeter java.lang.NullPointerException

java.lang.NullPointerException出现

java.lang.NullPointerException OnItemClickListener

java.lang.NullPointerException错误

mainactivity-java.lang.NullPointerException

java.lang.NullPointerException错误

java.lang.NullPointerException PrintWriter

引起:java.lang.NullPointerException:

创建DiskFileItem时java.lang.NullPointerException

尝试使用jdbc时出现java.lang.NullPointerException

当我创建使用其他类的值的数组时,java.lang.NullPointerException

java.lang.NullPointerException按下按钮(在“搜索按钮”上)时出现NullpointerException

由于 java.lang.NullPointerException,当我尝试从一个活动移动到另一个活动时,我的应用程序崩溃

Java/Selenium - java.lang.NullPointerException

java.lang.NullPointerException Andriod Studio Java

Java Swing jLabel java.lang.NullPointerException

Android Java中的java.lang.NullPointerException