我使用以下code使android设备成为ftp服务器(Android内部存储).我得到了os.android.NetworkOnMainThread的例外.我试图将onStart代码放在AsyncTask中,但app永远不会执行并在启动时崩溃.关于Android上的ftp服务器的任何帮助都会很棒,因为我不知道如何让它工作.
这是MainActivity Code
@H_502_8@package com.googlecode.simpleftp; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.TextView; import android.widget.Toast; public class FTPServer extends Activity { private static int COMMAND_PORT = 2121; static final int DIALOG_ALERT_ID = 0; private static ExecutorService executor = Executors.newCachedThreadPool(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.my_menu,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { case R.id.new_game: System.out.println("New game button is pressed!"); //newGame(); return true; case R.id.quit: System.out.println("Quit button is pressed!"); showDialog(DIALOG_ALERT_ID); return true; default: return super.onOptionsItemSelected(item); } } @Override protected Dialog onCreateDialog(int id){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Are you sure you want to exit?") .setCancelable(false).setPositiveButton("yes",new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog,int id){ FTPServer.this.finish(); } }) .setNegativeButton("No",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int which) { dialog.cancel(); } }); AlertDialog alert = builder.create(); return alert; }
HEre是ServerPI代码
@H_502_8@ import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class ServerPI implements Runnable{ private Socket clientSocket; private BufferedReader in; private PrintWriter out; private String baseDir; private String relativeDir; private String absoluteDir; private String fileName; private String filePath; public ServerPI(Socket incoming) throws IOException{ this.clientSocket = incoming; in = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream())); out = new PrintWriter(this.clientSocket.getOutputStream(),true); baseDir = new File("").getAbsolutePath(); relativeDir = "/"; absoluteDir = baseDir + relativeDir; fileName = ""; filePath = absoluteDir + "/" + fileName; } private void readCommandLoop() throws IOException { String line = null; reply(220,"Welcome to the SimpleFTP server!"); while((line = in.readLine()) != null){ int replyCode = executeCommand(line.trim()); if(replyCode == 221){ return; } } } private int executeCommand(String trim) { // TODO Auto-generated method stub return 0; } public int reply(int statusCode,String statusMessage){ out.println(statusCode + " " + statusMessage); return statusCode; } @Override public void run(){ try{ this.readCommandLoop(); } catch (IOException e){ e.printStackTrace(); } finally { try { if(in != null){ in.close(); in = null; } if(out != null){ out.close(); out = null; } if (clientSocket != null){ clientSocket.close(); clientSocket = null; } } catch (IOException e){ e.printStackTrace(); } } } }
我把代码放在AsyncTask中,就在这里
@H_502_8@ private class LongOperation extends AsyncTask
我在onCreate方法中调用longOpertation.应用程序在启动时崩溃的问题是什么?
@H_502_8@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fullscreen); new LongOperation().execute(); }
最佳答案
也许是因为你没有在清单中设置权限?您必须设置互联网使用权限.
原文链接:https://www.f2er.com/android/430836.html如果这不起作用,请告诉我们抛出异常的是哪一行.