繁体   English   中英

实现Runnable的公共类无法启动-Android

[英]Public class implementing runnable won't start-Android

当我单击列表视图中的项目时,我想启动一个新线程并执行我在Connect2类中为其定义的所需任务,但是据我所知,该线程未启动或未显示任何内容。指示为什么它没有开始。 如果有人可以帮助诊断代码中的问题,或者为我指出解决此问题的正确方向,我将不胜感激。 谢谢!

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_directory);





    final ListView fileDirectory=(ListView) findViewById(R.id.DirectoryView);
    final ArrayAdapter adapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1, SocketConnection.remoteList);
    fileDirectory.setAdapter(adapter);


    fileDirectory.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Toast.makeText(FileDirectory.this, "The click works", Toast.LENGTH_SHORT).show();
            FileDirectory.listItem=i;
            new Connect2().execute("");

            adapter.notifyDataSetChanged();


        }
    });
}
public class Connect2 extends AsyncTask<String, String, String>{
    @Override
    protected String doInBackground(String... params){
        runConnectCode();
        return null;
    }
}
public void runConnectCode(){
        String itemTemp=SocketConnection.remoteList.toArray()[FileDirectory.listItem].toString();

            SocketConnection.PW.write(itemTemp);
            //SocketConnection.DOS.flush();


            SocketConnection.currentF.concat("\\"+itemTemp);
            SocketConnection.PW.write(SocketConnection.currentF);
            //SocketConnection.DOS.flush();
        try{
            Object object=SocketConnection.OIS.readObject();
            SocketConnection.remoteList=(ArrayList<String>) object;
        } catch(IOException e){
            System.out.println(e);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }//run()

尝试使用runOnUiThread()运行您的线程;

尝试创建类扩展Asynctask并在doinbackground()方法中调用您的代码,如下所示:

public class Connect2 extends AsyncTask<String , String , String>

{

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

        runConnectCode();
        return null;
    }

}

public void runConnectCode ()
{
    String itemTemp = SocketConnection.remoteList.toArray()    [FileDirectory.listItem].toString();
    try {
      SocketConnection.DOS.writeUTF(itemTemp);
      SocketConnection.DOS.flush();
    } catch (IOException e) {
      System.out.println(e);
    }
    try {
      SocketConnection.currentF.concat("\\" + itemTemp);
      SocketConnection.DOS.writeUTF(SocketConnection.currentF);
      SocketConnection.DOS.flush();
    } catch (IOException e) {
      System.out.println(e);
    }
    try {
      Object object = SocketConnection.OIS.readObject();
      SocketConnection.remoteList = (ArrayList<String>) object;
    } catch (IOException e) {
      System.out.println(e);
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }

  }
}

最后,在需要时调用此函数:

new Connect2().execute("");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM