0

初めての Android アプリを作成していますが、私のコードは理解できない非常に奇妙な動作をします。そして、Google を 3 日間使用しましたが、解決策はありませんでした。

AndroidManifest.xml に "8" 以外の minSdkVersion を記述すると、FTP サーバーに接続できません。また、minSdkVersion「8」と「8」以外のtargetSdkVersionを使用する場合。minSdkVersion と targetSdkVersion を使用しない場合、すべて正常に動作します。要するに:

  • 最小 8、ターゲット 8 = OK
  • 分 8、ターゲットなし = OK
  • 最小なし、ターゲットなし = OK
  • 最小 8、ターゲット 17 = 失敗
  • 最小 10、目標 10 = 失敗
  • 等々...

ここに私の AndroidManifest.xml があります:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.package"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8"
          android:targetSdkVersion="17" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.package.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.examplepackage.Settings"></activity>
    <activity android:name="com.schmidgroup.sgfax.Tools"></activity>
    <activity android:name="com.schmidgroup.sgfax.MyFTP"></activity>
    <activity android:name="com.schmidgroup.sgfax.Printing"></activity>
    <activity android:name="com.schmidgroup.sgfax.Listings"></activity>
    <activity android:name="com.schmidgroup.sgfax.Blue"></activity>
 </application>
</manifest>

私の MainActivity.Java:

package com.example.package;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.content.Intent;
import android.view.MenuItem;

public class MainActivity extends Activity {

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

    // Button for Bluetooth-Connection
    Button verbinden = (Button) findViewById(R.id.button1);
    verbinden.setText(R.string.select_device);
    verbinden.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            Intent start = new Intent(getApplicationContext(), Blue.class);
            startActivity(start);
        }
    } );
}
}

私のクラス Blue.Java はいくつかの Bluetooth 処理を行い、Listings.Java を開始します。

package com.example.package;

import java.io.IOException;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.TextView;

public class Listings extends Activity {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listings);

    // Connect zum FTP-Server
    MyFTP conn = new MyFTP();
    conn.ftpConnect(host, user, pass, 21);  
            [... some more FTP stuff which don't work in cause of failing Ftp Connection...]    
}
}

そして最後に MyFTP.Java:

package com.example.package;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.*;
import android.content.Context;
import android.util.Log;

public class MyFTP {

private static void showServerReply(FTPClient FTPClient) {
    String[] replies = FTPClient.getReplyStrings();
    if (replies != null && replies.length > 0) {
        for (String aReply : replies) {
            System.out.println("SERVER: " + aReply);
        }
    }
}

//Now, declare a public FTP client object.
private static final String TAG = "MyFTPClient";
public FTPClient mFTPClient = null; 

//Method to connect to FTP server:
public boolean ftpConnect(String host, String username,
                          String password, int port)
{
    try {
        mFTPClient = new FTPClient();
        // connecting to the host
        mFTPClient.connect(host, port);
        showServerReply(mFTPClient);
        Log.i(TAG, "Successful conntected to " + host);
        // now check the reply code, if positive mean connection success
        if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
            // login using username & password
            boolean status = mFTPClient.login(username, password);
            Log.i(TAG, "Succesful logged in to " + host);
            /* Set File Transfer Mode
             *
             * To avoid corruption issue you must specified a correct
             * transfer mode, such as ASCII_FILE_TYPE, BINARY_FILE_TYPE,
             * EBCDIC_FILE_TYPE .etc. Here, I use BINARY_FILE_TYPE
             * for transferring text, image, and compressed files.
             */
            mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
            mFTPClient.enterLocalPassiveMode();

            return status;
        }
    } catch(Exception e) {
        Log.d(TAG, "Error: could not connect to host " + host );
    }

    return false;
} 
    [...and some more stuff...]

誰かが私が間違っていることを見ることができますか? ありがとうございました!

4

1 に答える 1

0

メイン UI スレッドでネットワーク操作を行うべきではありません。Android 3.0 以降の StrictMode ポリシーに関するこの質問をご覧ください。

于 2013-09-10T08:49:55.603 に答える