Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 33

0
votes
answers
7 views
+10

應用程序啓動時間很長

1

我遇到了應用程序啓動時的問題。如果我啓動我的應用程序(啓動主要活動),則需要大約3-4秒才能最終顯示應用程序。我從onCreate方法中刪除了所有內容,因此它只包含setContentView(R.layout.activity_main),它設置了一個簡單的LinearLayout。 MainActivity中沒有複雜的佈局結構或其他繁重的代碼。應用程序啓動時間很長

用於記錄啓動時間我都用在ADB shell命令它給我下面的輸出:

12-06 11:40:06.395 918 939 I am_activity_launch_time: [0,78089240, de.package.package/.MainActivity,3724,3724] 

也TraceView:

enter image description here

我不是很熟悉TraceView,所以我不太瞭解輸出,但「bindApplication」部分需要很長時間。 我還進口了我的gradle這個文件,我需要爲應用程序的一些庫,也許他們會影響啓動時間:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.0" 

    repositories { 
     mavenCentral() 
     jcenter() 
    } 

    defaultConfig { 
     applicationId "de.watado.watado" 
     minSdkVersion 16 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 
dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:25.0.1' 
    compile 'com.android.support:support-v4:25.0.1' 
    compile 'com.squareup.retrofit2:retrofit:2.1.0' 
    compile 'com.github.bumptech.glide:glide:3.7.0' 
    compile 'com.balysv:material-ripple:1.0.2' 
    compile 'com.google.android.gms:play-services-location:9.8.0' 
    compile 'com.google.android.gms:play-services-maps:9.8.0' 
    compile 'com.google.maps.android:android-maps-utils:0.4.4' 
    compile 'com.crystal:crystalrangeseekbar:1.1.1' 
    compile 'com.android.support:cardview-v7:25.0.1' 
} 

有誰知道爲什麼需要這麼長的時間來顯示我的應用程序?

編輯: MainActivity

public class MainActivity extends FragmentActivity implements View.OnClickListener, 
                  ViewPager.OnPageChangeListener{ 

private TextView tvHome, tvCat, tvSearch, tvLike; 
private int currentPos = 0; 
private ViewPager pager; 

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

@Override 
public void onClick(View view) { 
    switch (view.getId()){ 
     case R.id.textView_home: 
      changeButtonState(-1); 
      break; 
     case R.id.textView_categories: 
      changeButtonState(0); 
      break; 
     case R.id.textView_search: 
      changeButtonState(1); 
      break; 
     case R.id.textView_like: 
      changeButtonState(2); 
      break; 
    } 
} 
} 
+0

請分享應用程序清單文件 –

+0

它看起來像你的代碼是缺少的東西。你擁有所有這些依賴關係是沒有用的? – zombie

+0

您是否在應用程序中使用任何圖像(閃屏)如果是這樣,請檢查它的大小和分辨率 – zombie

沙发
0
0

你可以發佈您的自定義應用程序類和第一個活動?另外,請在發佈模式下檢查運行時間 - 由於InstantRun

+0

更新了我的問題,但我不使用自定義應用程序類。 – RyuZz

+0

好吧,所以請嘗試構建發佈版本並檢查發佈時間 - 也許您不必擔心它 –

+0

發佈版本中的發佈時間相同:/ – RyuZz

板凳
0
0

可能的原因:

  1. 使用Multidex增加了發射時間。

  2. 如果您清除數據並啓動應用程序,則需要更長的時間,因爲ART運行時的 會先編譯應用程序。

+0

我不使用multidex和發佈時間重建要高得多(約5秒)。 – RyuZz

+0

安裝谷歌Play商店新鮮的應用程序後的啓動時間並不算多。因爲安裝時也考慮了ART編譯時間。 –

0
votes
answers
6 views
+10

Android Studio ndk-build找不到文件

0

我試圖在Android Studio中編譯OPUS。 當我從命令行調用ndk-build時,一切正常。 當我從Android Studio構建它時,它失敗。Android Studio ndk-build找不到文件

我app.gradle:

externalNativeBuild { 
    ndkBuild { 
     path 'src/main/jni/Android.mk' 
    } 
} 

Android.mk有一些包括:

include celt_sources.mk 

錯誤:

Error while executing process G:ASDK
dk-bundle
dk-build.cmd with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=F:TP2
amandroidappsrcmainjniAndroid.mk NDK_APPLICATION_MK=F:TP2
amandroidappsrcmainjniApplication.mk APP_ABI=armeabi-v7a NDK_ALL_ABIS=armeabi-v7a NDK_DEBUG=0 APP_PLATFORM=android-19 NDK_OUT=F:/TP2/ram/android/app/build/intermediates/ndkBuild/release/obj NDK_LIBS_OUT=F:TP2
amandroidappuildintermediates
dkBuild
eleaselib APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n} 

爲什麼NDK_PROJECT_PATH空?如何在調用ndk-build之前告訴Android Studio設置當前目錄?

最佳,

+0

'NDK_PROJECT_PATH = null'看起來很正常。什麼是實際的錯誤? – Michael

+0

它無法編譯,因爲它無法找到MK文件。我通過將完整路徑放在包含語句中來暫時解決它。 – Michael

沙发
0
1

你可能跟着this或類似的解決方案,爲Android編譯準備鉅著。像

include celt_sources.mk 

的語句是不是一個好的做法,因爲他們迫使你在同一目錄Android.mk文件運行ndk-build。這還不算苦逼的Android工作室以這種方式工作,以下塊添加到您的的build.gradle

android { 
    defaultConfig { 
     externalNativeBuild { 
      ndkBuild { 
       arguments '-C src/main/jni' 
      } 
     } 
    } 
} 

但它是乾淨多了遵循許多其他版本之一Android.mk對於可以在WWW上找到的作品,例如this one它採用

include $(LOCAL_PATH)/celt_sources.mk 

這種方式,構建不依賴於爲ndk-build命令工作目錄。

0
votes
answers
6 views
+10

奇數DexArchiveMergerException

0

我以前遇到過這個問題,並且能夠很容易地修復它。但是,這一次,我不明白是什麼原因造成的。自從它工作以來,對build.gradle的唯一改動是implementation project(':sharedfiles')--一個用於穿戴/移動的共享通用模塊。我沒有添加這個,我將該模塊添加爲依賴項,並且該行被自動添加,所以我懷疑它是一個錯誤。我有multipleDexEnabled true,無法找到任何衝突的依賴關係。任何幫助將不勝感激,這是我第一次使用通用模塊。這裏是兩個build.gradle文件。奇數DexArchiveMergerException

移動模塊

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 26 
    defaultConfig { 
     applicationId "bhprograms.supremis" 
     minSdkVersion 23 
     targetSdkVersion 26 
     multiDexEnabled true 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    implementation fileTree(include: ['*.jar'], dir: 'libs') 
    implementation 'com.android.support:appcompat-v7:26.1.0' 
    implementation 'com.android.support.constraint:constraint-layout:1.0.2' 
    testImplementation 'junit:junit:4.12' 
    androidTestImplementation 'com.android.support.test:runner:1.0.1' 
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' 
    wearApp project(':wear') 
    implementation 'com.google.android.gms:play-services-wearable:+' 
    implementation files('libs/gson.jar') 
    implementation project(':sharedfiles') 
} 

公用模塊

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 26 



    defaultConfig { 
     minSdkVersion 23 
     targetSdkVersion 26 
     versionCode 1 
     multiDexEnabled true 
     minSdkVersion 23 
     targetSdkVersion 26 
     versionName "1.0" 

     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 

    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

} 

dependencies { 
    implementation fileTree(dir: 'libs', include: ['*.jar']) 

    implementation 'com.android.support:appcompat-v7:26.1.0' 
    testImplementation 'junit:junit:4.12' 
    androidTestImplementation 'com.android.support.test:runner:1.0.1' 
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' 
    implementation files('libs/gson.jar') 
} 

,當然,錯誤。

Error:Execution failed for task ':mobile:transformDexArchiveWithExternalLibsDexMergerForDebug'. 
> com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex 
沙发
0
1

通過在移動模塊中刪除implementation files('libs/gson.jar')來解決。不知道爲什麼這會修復它,可能是因爲我沒有在移動模塊中使用這個jar。如果實驗性功能無法正常工作,我將來可能需要它,但這是導致此問題的原因。

0
votes
answers
6 views
+10

Git Option不再顯示在Android Studio中

1

我錯過了Android Studio - > VCS中的git選項。一會兒,幾分鐘後它就消失了,我不知道爲什麼會發生這種情況。Git Option不再顯示在Android Studio中

你能幫我嗎?

這是我所看到的:

enable version control Integration

和:

Checkout from Version control

沙发
0
0

它主要是由於的Git整合插件被禁用。你應該啓用插件:

文件 - >設置 - >插件 - > serch git - >啓用Git集成 - >確定 - >重新啓動AS。

enter image description here

+0

非常感謝。我不知道爲什麼該插件已被停用。 – Hierarchy

板凳
0
0

做檢查:

  • ,你仍然有.git在您的項目
  • Settings | Version Control確實顯示Git的整合爲活動(再:「‘VCS’ - >‘啓用版本控制集成’。」,因爲你展示,應該有GIT)
+0

有一個git文件夾。我剛剛用它來推命令提示符。 不,沒有設置|版本控制了。我也嘗試重新安裝android studio,但它仍然丟失.. 我忘了告訴你,我從我的一個同學使用macos得到我的項目。因此,我只是將src文件夾導入到一個新項目中。 – Hierarchy

0
votes
answers
6 views
+10

Android Studio間歇性HttpsURLConnection失敗

0

我有多個應用程序使用相同的代碼將HttpsURLConnection連接到服務器。有時候,我無法與設備進行任何通信,但運行相同HttpsURLConnection代碼的不同設備到相同的服務器地址沒有任何問題。Android Studio間歇性HttpsURLConnection失敗

有時第一個設備會在多次嘗試似乎自行完成後進行連接。但是重置設備上的wifi連接總是會立即修復它。

這使我相信連接到服務器的路由器將設備從它的路由表中刪除,但是我會很感激代碼上的一雙額外的眼睛。

我有一個單獨的活動,以與下面的代碼HttpsURLConnection的:

class WebRequest { 

static String response = null; 
public final static int GET = 1; 
private final static int POST = 2; 

//Constructor with no parameter 
public WebRequest() { 

} 

/** 
* Making web service call 
* 
* @url - url to make request 
* @requestmethod - http request method 
*/ 
public String makeWebServiceCall(String url, int requestmethod) { 
    return this.makeWebServiceCall(url, requestmethod, null); 
} 

/** 
* Making service call 
* 
* @url - url to make request 
* @requestmethod - http request method 
* @params - http request params 
*/ 
private String makeWebServiceCall(String urladdress, int requestmethod, 
            HashMap<String, String> params) { 
    URL url; 
    String response = ""; 
    try { 
     url = new URL(urladdress); 

     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(15000); 
     conn.setConnectTimeout(15000); 
     conn.setDoInput(true); 

     if (requestmethod == POST) { 
      conn.setRequestMethod("POST"); 
     } else if (requestmethod == GET) { 
      conn.setRequestMethod("GET"); 
     } 

     if (params != null) { 
      OutputStream os = conn.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, "UTF-8")); 

      StringBuilder result = new StringBuilder(); 
      boolean first = true; 
      for (Map.Entry<String, String> entry : params.entrySet()) { 
       if (first) 
        first = false; 
       else 
        result.append("&"); 

       result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
       result.append("="); 
       result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); 
      } 

      writer.write(result.toString()); 

      writer.flush(); 
      writer.close(); 
      os.close(); 
     } 

     int responseCode = conn.getResponseCode(); 

     if (responseCode == HttpsURLConnection.HTTP_OK) { 
      String line; 
      BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      while ((line = br.readLine()) != null) { 
       response += line; 
      } 
     } else { 
      response = ""; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return response; 
} 

} 

我打電話了的AsyncTask內使用從另一個活動代碼:

WebRequest webreq = new WebRequest(); 

request = webreq.makeWebServiceCall(URL, WebRequest.GET); 

我很擔心,代碼中的某些內容導致該設備中的間歇性連接問題。我注意到的一件事是沒有connection.disconnect。

謝謝你對這個問題的任何見解!

+0

它與你的代碼無關。但是你用這個設備解釋。 – greenapps

+0

感謝您的關注。我忘記添加的一件事是停止使HttpUrlConnections能夠通過其他應用程序,YouTube,Google est連接到互聯網的設備,但互聯網和服務器都在同一個路由器上。 – matthew

沙发
0
1

經過幾個月的調試和測試後的長話短說我發現問題.....休息室裏的微波爐。

是的; WiFi下降的表面上隨機性質是由於天線固定在牆壁另一側的微波干擾造成的。

0
votes
answers
5 views
+10

有沒有辦法告訴Android Studio 3.0.1突出異常投擲者?

-1

有沒有辦法告訴過Android Studio 3.0.1突出在代碼的每一個方法可以拋出一個異常?確定在哪裏使用「嘗試 - 抓住」。有沒有辦法告訴Android Studio 3.0.1突出異常投擲者?

沙发
0
0

在拋出必須被捕獲的異常的Java方法(把裏面的try/catch塊),代碼將無法編譯,直到你做的,所以如果你不這樣做,你會得到一個紅線/編譯錯誤。

那些被稱爲檢查例外,例外的是已經被抓住,像IO。

其他異常,未檢查,或運行時異常,一般不應該沒有一個try/catch來處理,但是你需要警惕他們或解決這些問題。

例如,而不是追趕NullPointerException,你應該檢查null如果實例可以null

+0

讓我們舉個例子 「SharedPreferences.getInt(String鍵,詮釋利用DefValue)」。如果存在不是int的此名稱的首選項,則會拋出ClassCastException。如果我不把它放在try/catch塊中,我不會看到紅線/編譯錯誤(Android Studio根本不會將其視爲編譯錯誤)。我想使用try/catch,因爲在「catch」中我想創建可能來自用戶的錯誤的日誌(文本文件)。那麼,有沒有辦法告訴Android Studio 3.0.1突出顯示可以拋出異常的代碼中的每個方法? – Liviu

+0

ClassCastException異常是一種例外,你應該可以解決,而不是「趕」的,確保當你把某些類型的偏好,你獲得的是相同的類型。因爲你無法從這樣的異常中恢復,你會使用什麼值而不是你不能投射的值,這將是不正確的。使用運行時崩潰捕獲這些情況並在開發時修復它們 – elmorabea

+0

謝謝。你說得對。這是一個很好的做法。無論如何,是否有可能告訴Android Studio 3.0.1突出顯示可引發異常的代碼中的每個方法?這是毫無疑問的。 :) – Liviu

0
votes
answers
5 views
+10

如何從編輯文本值的標籤活動的片段Android Studio中3.0.1

-5

代碼:如何從編輯文本值的標籤活動的片段Android Studio中3.0.1

public class CustomerDetails extends Fragment { 
    EditText CustomerCode,FullName,AddressLine1,AddressLine2,MobileNo,EmailId,CustomerType; 
    Button Submit; 
    IonExchangeDataBasehelper ionexchangedatabase; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      // Inflate the layout for this fragment 
    //super.onCreate(savedInstanceState); 
      // View v =inflater.inflate(R.layout.fragment_customer_details,container,false); 
      View v =getActivity().getLayoutInflater().inflate(R.layout.fragment_customer_details,null); 
      CustomerCode=(EditText)v.findViewById(R.id.CustomerCode); 
      FullName=(EditText)v.findViewById(R.id.FullName); 
      AddressLine1=(EditText)v.findViewById(R.id.AddressLine1); 
      AddressLine2=(EditText)v.findViewById(R.id.AddressLine2); 
      MobileNo=(EditText)v.findViewById(R.id.MobileNo); 
      EmailId=(EditText)v.findViewById(R.id.EmailId); 
      CustomerType=(EditText)v.findViewById(R.id.CustomerType); 
      Submit=(Button)v.findViewById(R.id.Submit); 

      Submit.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        String abc = CustomerCode.getText().toString(); 
        Toast.makeText(getActivity(),"hhh :" ,Toast.LENGTH_SHORT).show(); 
        // database(); 
       } 
      }); 

      return v; 

     } 
+1

什麼是錯誤?活動中是edittext嗎? –

+0

你的意思是說,如何從EditText檢索值? –

+0

沒有它的片段,但即時通訊無法獲取edittext的值 –

沙发
0
0

清理你的代碼;嘗試並說,如果你仍然有錯誤

public class CustomerDetails extends Fragment { 
       EditText customerCode,fullName,addressLine1,addressLine2,mobileNo,emailId,customerType; 
       Button submit; 
       IonExchangeDataBasehelper ionexchangedatabase; 

        @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     v = inflater.inflate(R.layout.fragment_customer_details, container, 
     false); 
     // get the reference of views 
         customerCode=(EditText)v.findViewById(R.id.CustomerCode); 
         fullName=(EditText)v.findViewById(R.id.FullName); 
         addressLine1=(EditText)v.findViewById(R.id.AddressLine1); 
         addressLine2=(EditText)v.findViewById(R.id.AddressLine2); 
         mobileNo=(EditText)v.findViewById(R.id.MobileNo); 
         emailId=(EditText)v.findViewById(R.id.EmailId); 
         customerType=(EditText)v.findViewById(R.id.CustomerType); 
         submit=(Button)v.findViewById(R.id.Submit); 

         submit.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View view) { 
           String abc = customerCode.getText().toString(); 
           Toast.makeText(getActivity(), abc ,Toast.LENGTH_SHORT).show(); 
           // database(); 
          } 
         }); 

         return v; 

        } 
0
votes
answers
5 views
+10

不知道我的文件在原始文件夾內

-1

有人知道我的原始文件夾內的commands.json文件爲什麼不知道?不知道我的文件在原始文件夾內

enter image description here

cannot resolve symbole 'commands ' 我有幾個口味和風味各原料文件夾內,我已經不顧我的commands.json文件。

+0

你可以把資產文件夾此文件。 –

+0

謝謝,但我想解決這個問題,並找到我的錯誤是什麼? – Groot

+0

爲什麼downvote ??? – Groot

沙发
0
2

試試這個

InputStream ins = getResources().openRawResource(getResources().getIdentifier(  "commands",   "raw", getPackageName())); 
//                    FILENAME_WITHOUT_EXTENSION   YOUR_PACKAGE_NAME 

,而不是這個

InputStream ins = cx.getResources().openRawResource(R.raw.commands); 
0
votes
answers
5 views
+10

Android Studio源文件的副本不是最新的

0

我嘗試了通過創建項目的Zip文件來創建我的Android Studio項目的備份的簡單方法,但是這些文件的修改日期已經大多了。果然,當我用文本編輯器打開它們時,它們沒有我製作的MODS。這裏發生了什麼?當我在Studio中編輯它們時,一切都很好,但是當我將文件複製到Windows 7桌面時,我只會得到一箇舊版本。我懷疑這個問題與Android Studio的源代碼更改控制系統有關。Android Studio源文件的副本不是最新的

沙发
0
0

事實證明,該應用程序文件夾包含一個src文件夾,其中包含當前的來源。

0
votes
answers
5 views
+10

Android計算器 - 加號按鈕

0

我的計算器上有一個加號按鈕。第一種說法是在沒有輸入時(計算字符串變量保存來自用戶的所有輸入)添加「+」符號。第二個陳述是防止用戶通過添加「」在一行中輸入2個「+」符號。Android計算器 - 加號按鈕

它不斷給我一個錯誤:java.lang.StringIndexOutOfBoundsException: length=0; index=0

btnMinus.setOnClickListener(new View.OnClickListener() { 
    @Override 

    public void onClick(View view) { 
     calculation = tvCalculation.getText().toString(); 

     Character lastChar = calculation.charAt(calculation.length()); 

     //App negeert deze statements 
     if(calculation.length() >= 0) { 
       tvCalculation.setText(calculation + "-"); 
     } else if (lastChar.toString().equals("+")) { 
       tvCalculation.setText(calculation + ""); 
     } 
    } 
}); 

有人告訴我,那是因爲在toString()線4

+0

當字符串爲空(長度:0)時,錯誤是錯誤的。如果您嘗試查找空字符串的最後一個字符,您認爲會發生什麼?你也應該考慮使用char而不是Character來比較它與char文字,它們使用單??引號而不是雙引號。 – vandale

+0

如果我使用char,出於某種原因我不能使用==或.equals(),所以我必須保留Character。當字符串爲空時,語句1將處理它。 –

+0

這看起來很奇怪。 'lastChar =='+''也應該有效。 – vandale

沙发
0
0

,如果你打算讀「計算」字符串的最後一個字符,那麼你需要做的;

Character lastChar = calculation.charAt(calculation.length()-1); 

注意calculate.Length(-1)後的-1。

+0

本來我有-1,有同樣的錯誤。 –