2017-07-12 12 views
1

私はユーザーの選択したチェックボックスに応じて、選択されたものに関連するスキルを取得するためにサーバーへの非同期呼び出しを行いますフィールド。私は同じもののために改造を使用しています。私はSQLQueryクラスを定義しており、そのコンストラクターはStringパラメーターをとります。問題は、文字列引数でコンストラクタを呼び出すと、エラーArray type expected found java.lang.Stringが表示されることです。誰かがこれを解決するのを助けてください。事前にStringを受け取りメソッドの呼び出しでエラーが発生しました 'Array type expected found java.lang.String'

おかげでここに私のJavaファイル

package com.example.vishal.internshipseekerapp; 

import android.support.v7.app.ActionBar; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.Toast; 

import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 


import retrofit2.Call; 
import retrofit2.Callback; 
import retrofit2.Response; 
import retrofit2.Retrofit; 
import retrofit2.converter.gson.GsonConverterFactory; 



public class StudentRegistration extends AppCompatActivity implements View.OnClickListener { 

    private final int numFields = 13; 
    boolean[] checkField = new boolean[13]; 
    String[] field = {"computer vision", "content writing", "data mining", "electrical/electronics", "game development", "image processing", "marketing", "mechanical engineering", "mobile app dev", "programming", "software dev", "web dev"}; 
    Set<Skill> skill = new HashSet<>(); 

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

     ActionBar ab = getSupportActionBar(); 
     ab.setDisplayHomeAsUpEnabled(true); 

     // register onclick listener for all checkboxes 
     (findViewById(R.id.field0)).setOnClickListener(this); 
     (findViewById(R.id.field1)).setOnClickListener(this); 
     (findViewById(R.id.field2)).setOnClickListener(this); 
     (findViewById(R.id.field3)).setOnClickListener(this); 
     (findViewById(R.id.field4)).setOnClickListener(this); 
     (findViewById(R.id.field5)).setOnClickListener(this); 
     (findViewById(R.id.field6)).setOnClickListener(this); 
     (findViewById(R.id.field7)).setOnClickListener(this); 
     (findViewById(R.id.field8)).setOnClickListener(this); 
     (findViewById(R.id.field9)).setOnClickListener(this); 
     (findViewById(R.id.field10)).setOnClickListener(this); 
     (findViewById(R.id.field11)).setOnClickListener(this); 
     //(findViewById(R.id.field12)).setOnClickListener(this); 

     // register onclick listener for DONE button 
     Button done = (Button) findViewById(R.id.field_select_done); 
     done.setOnClickListener(this); 
    } 

    public void onClick(View v){ 
     switch(v.getId()){ 
      case R.id.field0: 
       if(((CheckBox) v).isChecked()) 
        checkField[0] = true; 
      case R.id.field1: 
       if(((CheckBox) v).isChecked()) 
        checkField[1] = true; 
      case R.id.field2: 
       if(((CheckBox) v).isChecked()) 
        checkField[2] = true; 
      case R.id.field3: 
       if(((CheckBox) v).isChecked()) 
        checkField[3] = true; 
      case R.id.field4: 
       if(((CheckBox) v).isChecked()) 
        checkField[4] = true; 
      case R.id.field5: 
       if(((CheckBox) v).isChecked()) 
        checkField[5] = true; 
      case R.id.field6: 
       if(((CheckBox) v).isChecked()) 
        checkField[6] = true; 
      case R.id.field7: 
       if(((CheckBox) v).isChecked()) 
        checkField[7] = true; 
      case R.id.field8: 
       if(((CheckBox) v).isChecked()) 
        checkField[8] = true; 
      case R.id.field9: 
       if(((CheckBox) v).isChecked()) 
        checkField[9] = true; 
      case R.id.field10: 
       if(((CheckBox) v).isChecked()) 
        checkField[10] = true; 
      case R.id.field11: 
       if(((CheckBox) v).isChecked()) 
        checkField[11] = true; 


      case R.id.field_select_done: 
       displayRelevantSkills(); 
     } 
    } 

    private void displayRelevantSkills() { 
     String field = "field"; 
     String checkBoxName; 


     final String SKILL_FIELD_URL = "https://data.outfight74.hasura-app.io/"; 


//  OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 

     // set request options for all requests 
     Retrofit.Builder builder = 
       new Retrofit.Builder() 
         .baseUrl(SKILL_FIELD_URL) 
         .addConverterFactory(
           GsonConverterFactory.create() 
         ); 

     // create retrofit adapter 
     Retrofit retrofit = 
       builder 
        /*.client(
          httpClient.build() 
        )*/ 
        .build(); 

     // create retrofit REST client 
     getRelevantSkills skillClient = retrofit.create(getRelevantSkills.class); 

     // for each checkbox do 
     for(int i = 0; i < numFields; i++) { 
      // if checkbox is ticked 
      if(checkField[i]) { 
       // fetch relevant skills from server 
       SQLQuery skillQuery = new SQLQuery(field[i]); 

       Call<List<Skill>> call = 
         skillClient.relevantSkills(skillQuery); 

       // Execute the call asynchronously. Get a positive or negative callback. 
       call.enqueue(new Callback<List<Skill>>() { 
        @Override 
        public void onResponse(Call<List<Skill>> call, Response<List<Skill>> response) { 
         // The network call was a success and we got a response 
         // add to skills HashSet 
         skill.addAll(response.body()); 
         Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show(); 
        } 

        @Override 
        public void onFailure(Call<List<Skill>> call, Throwable t) { 
         // the network call was a failure 
         // TODO: handle error 
         Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     } 

     // display a drop down menu having all elements of HashSet 
     for(Skill s : skill) 
     { 
      CheckBox skillItem = new CheckBox(getApplicationContext()); 
      skillItem.setText(s.getSkill()); 
     } 
    } 
} 

であり、ここであなたがSQLQueryコンストラクタにfield[i]を渡そうとしているgetRelevantSkills.java file

package com.example.vishal.internshipseekerapp; 

import java.util.List; 

import retrofit2.Call; 
import retrofit2.http.Body; 
import retrofit2.http.POST; 


class Where{ 
    // this will be given by the user 
    private String skill; 

    public Where(String skill) { 
     this.skill = skill; 
    } 
} 

class Args{ 
    final String table = "skill_field_relation"; 
    final String[] columns = {"skill"}; 
    private Where where; 

    public Args(String field) { 
     where = new Where(field); 
    } 
} 

class SQLQuery{ 
    final String type = "select"; 
    private Args args; 
    public SQLQuery(java.lang.String field) { 
     args = new Args(field); 
    } 
} 

class Skill{ 
    private String skill; 

    public String getSkill() { 
     return skill; 
    } 

    public Skill(String skill) { 
     this.skill = skill; 
    } 
} 

public interface getRelevantSkills { 
    @POST("/v1/query") 
    Call<List<Skill>> relevantSkills(
      @Body SQLQuery fetchSkills 
    ); 
} 
+0

こんにちはジェームズ、私はあなたがHasuraプロジェクトを使用していることがわかります。 https://github.com/hasura/android-sdkでAndroid SDKを試しましたか?これは、あなたのアプリをより速く構築するのに役立ちます:) –

+0

@Jaison TitusもしあなたがAndroidのSDKに関するあなたの仲間のインターンの疑念を明らかにすれば、あなたの側から本当に良い助けになるでしょう。ソーシャル認証モジュールとHasuraUser.socialLoginType()メソッドに関して真の混乱があります。 –

答えて

2

ですが、fieldString、ではありませんアレイ。代わりにfieldを渡す必要があります。

EDIT:

private void displayRelevantSkills() { 
    String field = "field"; 

    ... 

    SQLQuery skillQuery = new SQLQuery(field[i]); 
    ... 
} 

あなたは(タイプString[]である)、同じ名前のインスタンス変数を隠しタイプStringのローカルfield変数を持っています。

あなたはインスタンス変数(String[] field = {...};)を使用することを意図している場合、あなたが書く必要があります:

SQLQuery skillQuery = new SQLQuery(this.field[i]); 
+0

looke注意深くSring [] Field = {"some string"、 "some other string"};明らかにフィールドは文字列配列です –

+0

@JamesHowlettもっと慎重に見てください: 'String field =" field ";' – Eran

+0

@JamesHowlett Eranは正しいです。あなたはあなたのフィールドを陰にしました。混乱を避けるためにフィールド配列をフィールドに変更してください。 –

関連する問題