2016-08-18 88 views
1

我正在创建一个用于将Json文件发送到我创建的本地数据库的Android应用程序。但是,每当我尝试启动它,我的gradle同步失败。我把正确的位置设置在正确的位置(我认为),但我不知道为什么。 这里是我的gradle产出:从Android应用程序发送Json到本地数据库

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 24 
    buildToolsVersion "24.0.1" 

    defaultConfig { 
     applicationId "francesco.postjson" 
     minSdkVersion 23 
     targetSdkVersion 24 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:24.2.0' 
    classpath 'com.android.tools.build:gradle:2.1.3' 
    compile 'cz.msebera.android:httpclient:4.4.1.1' 
    compile files('libs/httpcore-4.4.4.jar') 
    compile files('libs/okhttp-3.4.1.jar') 
    compile files('libs/commons-codec-1.9.jar') 
    compile files('libs/commons-logging-1.2.jar') 
    compile 'com.squareup.okhttp:okhttp:2.0.0' 
    compile files('libs/httpclient-win-4.5.2.jar') 
    compile files('libs/httpclient-4.5.2.jar') 
    compile files('libs/httpcore-4.4.4.jar') 
    compile files('libs/fluent-hc-4.5.2.jar') 
} 

我用这些类型的依赖关系,我有错误:

Error:(25, 0) Could not find method classpath() for arguments [com.android.tools.build:gradle:2.1.3] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. 
<a href="openFile:C:\Users\Francesco\AndroidStudioProjects\POSTJSON\app\build.gradle">Open File</a> 

我必须放置依赖于另一个地方?谢谢

编辑:这是我的发送

package francesco.postjson; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URLConnection; 
import org.json.JSONObject; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.app.Activity; 
import francesco.postjson.Person; 

public class MainActivity extends Activity implements OnClickListener { 

    TextView tvIsConnected; 
    EditText etName,etCountry,etTwitter; 
    Button btnPost; 

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

     // get reference to the views 
     tvIsConnected = (TextView) findViewById(R.id.tvIsConnected); 
     etName = (EditText) findViewById(R.id.etName); 
     etCountry = (EditText) findViewById(R.id.etCountry); 
     etTwitter = (EditText) findViewById(R.id.etTwitter); 
     btnPost = (Button) findViewById(R.id.btnPost); 

     // check if you are connected or not 
     if(isConnected()){ 
      tvIsConnected.setBackgroundColor(0xFF00CC00); 
      tvIsConnected.setText("You are conncted"); 
     } 
     else{ 
      tvIsConnected.setText("You are NOT conncted"); 
     } 

     // add click listener to Button "POST" 
     btnPost.setOnClickListener(this); 

    } 

    public static String POST(String url, Person person){ 
     InputStream inputStream = null; 
     String result = ""; 
     try { 

      // 1. create HttpClient 
      HttpClient httpclient = new DefaultHttpClient(); 

      // 2. make POST request to the given URL 
      HttpPost httpPost = new HttpPost(url); 

      String json = ""; 

      // 3. build jsonObject 
      JSONObject jsonObject = new JSONObject(); 
      jsonObject.accumulate("name", person.getName()); 
      jsonObject.accumulate("country", person.getCountry()); 
      jsonObject.accumulate("twitter", person.getTwitter()); 

      // 4. convert JSONObject to JSON to String 
      json = jsonObject.toString(); 

      // ** Alternative way to convert Person object to JSON string usin Jackson Lib 
      // ObjectMapper mapper = new ObjectMapper(); 
      // json = mapper.writeValueAsString(person); 

      // 5. set json to StringEntity 
      StringEntity se = new StringEntity(json); 

      // 6. set httpPost Entity 
      httpPost.setEntity(se); 

      // 7. Set some headers to inform server about the type of the content 
      httpPost.setHeader("Accept", "application/json"); 
      httpPost.setHeader("Content-type", "application/json"); 

      // 8. Execute POST request to the given URL 
      HttpResponse httpResponse = httpclient.execute(httpPost); 

      // 9. receive response as inputStream 
      inputStream = httpResponse.getEntity().getContent(); 

      // 10. convert inputstream to string 
      if(inputStream != null) 
       result = convertInputStreamToString(inputStream); 
      else 
       result = "Did not work!"; 

     } catch (Exception e) { 
      Log.d("InputStream", e.getLocalizedMessage()); 
     } 

     // 11. return result 
     return result; 
    } 

    public boolean isConnected(){ 
     ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Activity.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
     if (networkInfo != null && networkInfo.isConnected()) 
      return true; 
     else 
      return false; 
    } 
    @Override 
    public void onClick(View view) { 

     switch(view.getId()){ 
      case R.id.btnPost: 
       if(!validate()) 
        Toast.makeText(getBaseContext(), "Enter some data!", Toast.LENGTH_LONG).show(); 
       // call AsynTask to perform network operation on separate thread 
       new HttpAsyncTask().execute("http://hmkcode.appspot.com/jsonservlet"); 
       break; 
     } 

    } 
    private class HttpAsyncTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... urls) { 

      person = new Person(); 
      person.setName(etName.getText().toString()); 
      person.setCountry(etCountry.getText().toString()); 
      person.setTwitter(etTwitter.getText().toString()); 

      return POST(urls[0],person); 
     } 
     // onPostExecute displays the results of the AsyncTask. 
     @Override 
     protected void onPostExecute(String result) { 
      Toast.makeText(getBaseContext(), "Data Sent!", Toast.LENGTH_LONG).show(); 
     } 
    } 

    private boolean validate(){ 
     if(etName.getText().toString().trim().equals("")) 
      return false; 
     else if(etCountry.getText().toString().trim().equals("")) 
      return false; 
     else if(etTwitter.getText().toString().trim().equals("")) 
      return false; 
     else 
      return true; 
    } 
    private static String convertInputStreamToString(InputStream inputStream) throws IOException{ 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
     String line = ""; 
     String result = ""; 
     while((line = bufferedReader.readLine()) != null) 
      result += line; 

     inputStream.close(); 
     return result; 

    } 
} 
+0

如果您使用的是Windows,那么最好将您的项目放在其他目录上,因为窗口试图保护C盘。问题可能是org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler由于安全原因无法访问构建文件。 –

回答

0

首先,你的代码,你发送JSON的一部分份额代码。

二,为什么你使用这么多的依赖关系?也许你正在尝试使用Apache类,并在互联网的某个地方找到这些依赖关系。完整的解决方案可以在您发布代码后提供。但尝试删除此行:classpath 'com.android.tools.build:gradle:2.1.3'。并且使用HttpURLConnection而不是Apache类,因为最后不推荐使用。

(我知道这必须是一条评论,但我的声望很低)。

+0

编辑。此外,我试图删除所有这些,但我不能使用它 – lavendemmia

+0

你有超过50的声望,所以你应该能够评论问题,Turkhan。 – halfer

0
classpath 'com.android.tools.build:gradle:2.1.3' 

它应该在您的项目gradle文件中给出,而不是在模块gradle文件中给出。

为Apache HTTP客户端使用,添加

useLibrary 'org.apache.http.legacy'

模块gradle这个我android的标签内。 e之后

buildToolsVersion "24.0.1" 
+0

现在我删除了该文件,并且无法找到我的代码中的所有httpclient,httppost,ecc ecc。我如何解决这个问题? – lavendemmia

相关问题